/**
 * File: stack.h
 * 基于数组实现固定容量的栈
 */

#include "stack.h"

Stack *init_stack() // 初始化空栈
{
  Stack *stack;
  stack = (Stack *)malloc(sizeof(Stack));
  stack->size = 0;
  stack->nums = (int *)malloc(sizeof(int) * MAX_SIZE);
  return stack;
}

int get_length(Stack *stack) // 获取长度
{
  return stack->size;
}

bool is_empty(Stack *stack) // 判断是否是空栈
{
  return get_length(stack) == 0;
}

void push(Stack *stack, int value) // 入栈
{
  int index = get_length(stack);
  if (index == MAX_SIZE) {
    puts("栈已满");
    return;
  }
  stack->nums[index] = value;
  stack->size++;
}

int peek(Stack *stack) // 访问栈顶的值
{
  return stack->nums[get_length(stack) - 1];
}

int pop(Stack *stack) // 出栈
{
  int val = peek(stack);
  stack->size--;
  return val;
}

void print_stack(Stack *stack) // 打印栈
{
  printf("From bottom to top:\n{ ");
  for (int i = 0; i < get_length(stack); i++) 
  {
    if (!i) printf("%d", stack->nums[i]);
    else printf(", %d", stack->nums[i]);
  }
  puts(" }");
}

void destory_stack(Stack *stack) // 销毁栈
{
  free(stack->nums);
  free(stack);
}